﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Proyecto7CAD.Properties;
using System.Data;
using System.Collections;

namespace Proyecto7CAD
{
    public class EnemigoCAD
    {
        //Inserción de un enemigo
        public void insertarEnemigoCAD(string nombre, int ataque, int vida, int defensa, int puntos, string imagen)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from Enemigo ", conex);

                da.Fill(bdvirtual, "enemigo");
                //Obtenemos la tabla enemigos
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["enemigo"];
                //Creamos la nueva fila a insertar
                DataRow nuevafila = tabla.NewRow();
                nuevafila[1] = nombre;
                nuevafila[2] = ataque;
                nuevafila[3] = vida;
                nuevafila[4] = defensa;
                nuevafila[5] = puntos;
                nuevafila[6] = imagen;

                tabla.Rows.Add(nuevafila);

                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                da.Update(bdvirtual, "enemigo");

                /*conex.Open();

                SqlCommand comando = new SqlCommand("insert into Enemigo(nombreEnemigo, ataqueEnemigo, vidaEnemigo, defensaEnemigo, puntosEnemigo, imagenEnemigo) values ('" + enemigo.getNombre() + "','" + enemigo.getAtaque() + "','" + enemigo.getVida() + "','" + enemigo.getDefensa() + "','" + enemigo.getPuntos() + "','" + enemigo.getImagen() + "');", conex);

                comando.ExecuteNonQuery();*/
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }

            conex.Close();
        }

        //Borrado de un enemigo
        public void borrarEnemigoCAD(int id)
        {
            int i = 0;
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from Enemigo ", conex);

                da.Fill(bdvirtual, "enemigo");
                //Obtenemos la tabla enemigos
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["enemigo"];

                foreach (DataRow registro in tabla.Rows)
                {
                    if ((int)registro["idEnemigo"] == id)
                    {
                        tabla.Rows[i].Delete();
                    }
                    i++;
                }

                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                da.Update(bdvirtual, "enemigo");
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }

            conex.Close();
        }

        //Obtiene todos los registros de la tabla EnemigoLocalizacion
        public DataSet obtenerEnemigosLocalizacion()
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from enemigolocalizacion", conex);

                da.Fill(bdvirtual, "enemigolocalizacion");
                return bdvirtual;
            }
            catch (Exception ex)
            {
                DataSet bdvacia = new DataSet();
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Obtiene el enemigo con el id del argumento
        public DataTable obtenerEnemigo(int id)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from enemigo where idEnemigo=" + id.ToString(), conex);

                da.Fill(bdvirtual, "enemigo");

                return bdvirtual.Tables["enemigo"];
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Obtiene todos los enemigos de la BD
        public DataTable obtenerEnemigos()
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from enemigo", conex);

                da.Fill(bdvirtual, "enemigo");

                return bdvirtual.Tables["enemigo"];
            }
            catch (Exception ex)
            {
                DataSet bdvacia = new DataSet();
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Obtiene el enemigo por nombre y filtra por ataque y vida
        public DataTable obtenerEnemigoNombre(string nombre, int vidadesde = -1, int vidahasta = -1)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = null;
                if (vidadesde == -1 && vidahasta == -1)
                {
                    da = new SqlDataAdapter("select * from enemigo where nombreEnemigo LIKE '%" + nombre + "%'", conex);
                }
                else if (vidadesde == -1)
                {
                    da = new SqlDataAdapter("select * from enemigo where vidaEnemigo<=" + vidahasta + " AND nombreEnemigo LIKE '%" + nombre + "%'", conex);
                }
                else if (vidahasta == -1)
                {
                    da = new SqlDataAdapter("select * from enemigo where vidaEnemigo>" + vidadesde + " AND nombreEnemigo LIKE '%" + nombre + "%'", conex);
                }
                else
                {
                    da = new SqlDataAdapter("select * from enemigo where vidaEnemigo<=" + vidahasta + " AND vidaEnemigo>" + vidadesde + " AND nombreEnemigo LIKE '%" + nombre + "%'", conex);
                }

                da.Fill(bdvirtual, "enemigo");
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["enemigo"];

                //ENEnemigo enemigo = new ENEnemigo();
                //ArrayList listaenemigos = new ArrayList();

                /*foreach (DataRow registro in bdvirtual.Tables["enemigo"].Rows)
                {
                    enemigo.setId(int.Parse(registro[0].ToString()));
                    enemigo.setNombre(registro[1].ToString());
                    enemigo.setAtaque(int.Parse(registro[2].ToString()));
                    enemigo.setVida(int.Parse(registro[3].ToString()));
                    enemigo.setDefensa(int.Parse(registro[4].ToString()));
                    enemigo.setPuntos(int.Parse(registro[5].ToString()));
                    enemigo.setImagen(registro[6].ToString());

                    listaenemigos.Add(enemigo);
                }*/

                return tabla;
            }
            catch
            {
                DataTable tablavacia = new DataTable();
                return tablavacia;
            }
            finally
            {
                conex.Close();
            }
        }

        //Modifica un enemigo de la BD
        public void editarEnemigoCAD(int id, string nombre, int ataque, int vida, int defensa, int puntos, string imagen)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                int i = 0;
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from enemigo", conex);

                da.Fill(bdvirtual, "enemigo");
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["enemigo"];

                foreach (DataRow registro in tabla.Rows)
                {
                    if ((int)registro["idEnemigo"] == id)
                    {
                        tabla.Rows[i][1] = nombre;
                        tabla.Rows[i][2] = ataque;
                        tabla.Rows[i][3] = vida;
                        tabla.Rows[i][4] = defensa;
                        tabla.Rows[i][5] = puntos;
                        tabla.Rows[i][6] = imagen;
                    }
                    i++;
                }

                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                da.Update(bdvirtual, "enemigo");
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }

            conex.Close();          
        }

        //Obtiene todos los enemigos asociados a una localizacion que se pasa por argumento
        public DataSet obtenerEnemigoLocalizacion(int idLocalizacion)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select idEnemigo, porcentaje from enemigolocalizacion where idLocalizacion=" + idLocalizacion.ToString(), conex);

                da.Fill(bdvirtual, "enemigolocalizacion");

                return bdvirtual;
            }
            catch
            {
                DataSet bdvacia = new DataSet();
                return bdvacia;
            }
            finally
            {
                conex.Close();
            }
        }

        //Obtiene el nombre del enemigo
        public string obtenerNombreEnemigo(int id)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select nombreEnemigo from enemigo where idEnemigo=" + id, conex);

                da.Fill(bdvirtual, "enemigo");

                return bdvirtual.Tables["enemigo"].Rows[0][0].ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }

        }
    }
}
